#include "encoder.h"
#include "cmsis_os.h"

encoder_data_t encoder_data;

static void encoder_isr_function(char *arg)

void encoder_init(void)
{
    GpioInit();
    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_0, WIFI_IOT_IO_FUNC_GPIO_0_GPIO);
    GpioSetDir(WIFI_IOT_IO_NAME_GPIO_0, WIFI_IOT_GPIO_DIR_IN);
    IoSetPull(WIFI_IOT_IO_NAME_GPIO_0, WIFI_IOT_IO_PULL_UP);
    GpioRegisterIsrFunc(WIFI_IOT_IO_NAME_GPIO_0, WIFI_IOT_INT_TYPE_EDGE, WIFI_IOT_GPIO_EDGE_FALL_LEVEL_LOW, encoder_isr_function, NULL);

    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_1, WIFI_IOT_IO_FUNC_GPIO_1_GPIO);
    GpioSetDir(WIFI_IOT_IO_NAME_GPIO_1, WIFI_IOT_GPIO_DIR_IN);
    IoSetPull(WIFI_IOT_IO_NAME_GPIO_1, WIFI_IOT_IO_PULL_UP);
    GpioRegisterIsrFunc(WIFI_IOT_IO_NAME_GPIO_1, WIFI_IOT_INT_TYPE_EDGE, WIFI_IOT_GPIO_EDGE_FALL_LEVEL_LOW, encoder_isr_function, NULL);

    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_2, WIFI_IOT_IO_FUNC_GPIO_2_GPIO);
    GpioSetDir(WIFI_IOT_IO_NAME_GPIO_2, WIFI_IOT_GPIO_DIR_IN);
    IoSetPull(WIFI_IOT_IO_NAME_GPIO_2, WIFI_IOT_IO_PULL_UP);
    GpioRegisterIsrFunc(WIFI_IOT_IO_NAME_GPIO_2, WIFI_IOT_INT_TYPE_EDGE, WIFI_IOT_GPIO_EDGE_FALL_LEVEL_LOW, encoder_isr_function, NULL);
}


static void encoder_isr_function(char *arg)
{
    (void) arg;
    osDelay(1); //延时10ms
    if(GpioGetInputVal(WIFI_IOT_GPIO_IDX_0, WIFI_IOT_GPIO_VALUE0) == 1)
    {
        encoder_data.sw_state = 1;
        encoder_data.buzzer_on_flag = 1;
    }
    else if(GpioGetInputVal(WIFI_IOT_GPIO_IDX_1, WIFI_IOT_GPIO_VALUE0) == 1 && GpioGetInputVal(WIFI_IOT_GPIO_IDX_2, WIFI_IOT_GPIO_VALUE0) == 0)
    {
        encoder_data.rotating_l_num++;
        encoder_data.rotating_r_num = 0;
    }
    else if(GpioGetInputVal(WIFI_IOT_GPIO_IDX_1, WIFI_IOT_GPIO_VALUE0) == 0 && GpioGetInputVal(WIFI_IOT_GPIO_IDX_2, WIFI_IOT_GPIO_VALUE0) == 1)
    {
        encoder_data.rotating_l_num = 0;
        encoder_data.rotating_r_num++;
    }
}